using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
namespace Sanchay
{
    //the class defination that inherits from DataGridView
    public class DataGridViewEx : DataGridView
    {
        public DataGridViewEx()
            : base()
        {
             //set the edit mode to "on enter" so that when a cell gains focus 
             //it automatically enters editing mode
              this.EditMode = DataGridViewEditMode.EditOnEnter;
         }
        protected override bool ProcessDialogKey(Keys keyData)
        {
            //if the key pressed is "return" then tell 
            //the datagridview to move to the next cell
            if (keyData == Keys.Enter)
            {
                MoveToNextCell();
                return true;
            }
            else
                return base.ProcessDialogKey(keyData);
        }

        public void MoveToNextCell()
        {
            int CurrentColumn, CurrentRow;

            //get the current indicies of the cell
            CurrentColumn = this.CurrentCell.ColumnIndex;
            CurrentRow = this.CurrentCell.RowIndex;

            //if cell is at the end move it to the first cell of the next row
            //other with move it to the next cell
            if (CurrentColumn == this.Columns.Count - 1 &&
                CurrentRow != this.Rows.Count - 1)
            {
                base.ProcessDataGridViewKey(new KeyEventArgs(Keys.Home));
                base.ProcessDataGridViewKey(new KeyEventArgs(Keys.Down));
            }
            else
                base.ProcessDataGridViewKey(new KeyEventArgs(Keys.Right));

        }
        protected override void OnRowPostPaint(DataGridViewRowPostPaintEventArgs e)
        { //this method overrides the DataGridView's RowPostPaint event 
            //in order to automatically draw numbers on the row header cells
            //and to automatically adjust the width of the column containing
            //the row header cells so that it can accommodate the new row
            //numbers,

            //store a string representation of the row number in 'strRowNumber'
            string strRowNumber = (e.RowIndex + 1).ToString();

            //prepend leading zeros to the string if necessary to improve
            //appearance. For example, if there are ten rows in the grid,
            //row seven will be numbered as "07" instead of "7". Similarly, if 
            //there are 100 rows in the grid, row seven will be numbered as "007".
            while (strRowNumber.Length < this.RowCount.ToString().Length) strRowNumber = "0" + strRowNumber;

            //determine the display size of the row number string using
            //the DataGridView's current font.
            SizeF size = e.Graphics.MeasureString(strRowNumber, this.Font);

            //adjust the width of the column that contains the row header cells 
            //if necessary
            if (this.RowHeadersWidth < (int)(size.Width + 20)) this.RowHeadersWidth = (int)(size.Width + 20);

            //this brush will be used to draw the row number string on the
            //row header cell using the system's current ControlText color
            Brush b = SystemBrushes.ControlText;

            //draw the row number string on the current row header cell using
            //the brush defined above and the DataGridView's default font
            e.Graphics.DrawString(strRowNumber, this.Font, b, e.RowBounds.Location.X + 15, e.RowBounds.Location.Y + ((e.RowBounds.Height - size.Height) / 2));

            //call the base object's OnRowPostPaint method
            base.OnRowPostPaint(e);
        } //end OnRowPostPaint method
    }
}